home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-03 / dosbasic.zip / ASM.ZIP / RSTRING.ASM < prev    next >
Assembly Source File  |  1990-12-19  |  3KB  |  121 lines

  1. ;«RM82»«TS7,16,24,32,40,48»
  2. ; updated 11/16/90
  3.  
  4. ;============================================================================
  5. ;   Copyright (C) Copr. 1990 by Sidney J. Kelly
  6. ;           All Rights Reserved.
  7. ;           Sidney J. Kelly
  8. ;           150 Woodhaven Drive
  9. ;           Pittsburgh, PA 15228
  10. ;           home phone 412-561-0950 (7pm to 9:30pm EST)
  11. ;============================================================================
  12.  
  13. ;=======================================================================
  14. ;DECLARE SUB REVERSESTRING (A$)
  15. ;will reverse A$
  16. ;
  17. ;DECLARE SUB LEFTROTATE (A$)
  18. ;will rotate a string one character to the left
  19. ;
  20. ;DECLARE SUB RIGHTROTATE (A$)
  21. ;will rotate a string one character to the right
  22. ;
  23. ;=======================================================================
  24.  
  25. DOSSEG
  26. .model medium
  27. .code
  28.     public REVERSESTRING, LEFTROTATE, RIGHTROTATE
  29.  
  30. ; Please do not remove
  31. Copyright       DB    13,10,'Copyright Copr. (C) 1990 Sidney J. Kelly',13,10
  32. Copyright1      DB    'All Rights Reserved',13,10,26
  33.  
  34. EVEN
  35. REVERSESTRING Proc  Far
  36.      Push     BP
  37.      Mov      BP,SP
  38.      Push     DI
  39.      Mov      BX,[BP+6]
  40.      Mov      CX,[BX]
  41.      Mov      DI,[BX+2]
  42.      Mov      BX,CX
  43.      Shr      CX,1       ;divide by 2
  44.      Jcxz     finis1     ;if length less than 2, then quit
  45.      Add      BX,DI      ;put length + address in BX
  46.      Dec      BX         ;reduce by one
  47. looper1:
  48.      Mov      AH,[DI]
  49.      Mov      AL,[BX]
  50.      Mov      [BX],AH
  51.      Mov      [DI],AL
  52.      Inc      DI
  53.      Dec      BX
  54.      Loop     looper1
  55. finis1:
  56.      Pop      DI
  57.      Pop      BP
  58.      Ret      2
  59. REVERSESTRING ENDP
  60.  
  61. EVEN
  62. LEFTROTATE  Proc  Far
  63.      Push     BP
  64.      Mov      BP,SP
  65.      Push     SI
  66.      Push     DI
  67.      Mov      BX,[BP+6]     ; get string
  68.      Mov      CX,[BX]
  69.      Cmp      CX,2          ; quit if length < 2
  70.      JB       finis2
  71.      Mov      SI,[BX+2]     ; put offset in SI
  72.      Mov      AX,DS
  73.      Mov      ES,AX
  74.  
  75.      ASSUME ES:@data
  76.  
  77.      Mov      DL,[SI]
  78.      Mov      DI,SI
  79.      Inc      SI
  80.      Dec      CX
  81.      Cld
  82.      Repz     Movsb
  83.      Mov      [DI],DL
  84. finis2:
  85.      Jmp      short finis3
  86. LEFTROTATE endp
  87.  
  88. EVEN
  89. RIGHTROTATE Proc Far
  90.      Push     BP
  91.      Mov      BP,SP
  92.      Push     SI
  93.      Push     DI
  94.      Mov      BX,[BP+6]
  95.      Mov      CX,[BX]
  96.      Cmp      CX,2
  97.      JB       finis3           ;string len < 2
  98.      Mov      SI,[BX+2]
  99.      Mov      AX,DS
  100.      Mov      ES,AX
  101.  
  102.      ASSUME ES:@data
  103.  
  104.      Add      SI,CX
  105.      Dec      SI
  106.      Mov      DL,[SI]
  107.      Mov      DI,SI
  108.      Dec      SI
  109.      Dec      CX
  110.      Std
  111.      Repz     Movsb
  112.      Mov      [DI],DL
  113.      Cld
  114. finis3::
  115.      Pop      DI
  116.      Pop      SI
  117.      Pop      BP
  118.      Ret      2
  119. RIGHTROTATE endp
  120. end
  121.